﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text.RegularExpressions;

/// <summary>
///BBS_TypeConverter 的摘要说明
/// </summary>
public class BBS_TypeConverter
{
    /// <summary>
    /// string型转换为bool型
    /// </summary>
    /// <param name="strValue">要转换的字符串</param>
    /// <param name="defValue">缺省值</param>
    /// <returns>转换后的bool类型结果</returns>
    public static bool StrToBool(object expression, bool defValue)
    {
        if (expression != null)
            return StrToBool(expression, defValue);

        return defValue;
    }

    /// <summary>
    /// string型转换为bool型
    /// </summary>
    /// <param name="strValue">要转换的字符串</param>
    /// <param name="defValue">缺省值</param>
    /// <returns>转换后的bool类型结果</returns>
    public static bool StrToBool(string expression, bool defValue)
    {
        if (expression != null)
        {
            if (string.Compare(expression, "true", true) == 0)
                return true;
            else if (string.Compare(expression, "false", true) == 0)
                return false;
        }
        return defValue;
    }

    /// <summary>
    /// 将对象转换为Int32类型
    /// </summary>
    /// <param name="strValue">要转换的字符串</param>
    /// <param name="defValue">缺省值</param>
    /// <returns>转换后的int类型结果</returns>
    public static int ObjectToInt(object expression)
    {
        return ObjectToInt(expression, 0);
    }

    /// <summary>
    /// 将对象转换为Int32类型
    /// </summary>
    /// <param name="strValue">要转换的字符串</param>
    /// <param name="defValue">缺省值</param>
    /// <returns>转换后的int类型结果</returns>
    public static int ObjectToInt(object expression, int defValue)
    {
        if (expression != null)
            return StrToInt(expression.ToString(), defValue);

        return defValue;
    }

    /// <summary>
    /// 将对象转换为Int32类型,转换失败返回0
    /// </summary>
    /// <param name="str">要转换的字符串</param>
    /// <returns>转换后的int类型结果</returns>
    public static int StrToInt(string str)
    {
        return StrToInt(str, 0);
    }

    /// <summary>
    /// 将对象转换为Int32类型
    /// </summary>
    /// <param name="str">要转换的字符串</param>
    /// <param name="defValue">缺省值</param>
    /// <returns>转换后的int类型结果</returns>
    public static int StrToInt(string str, int defValue)
    {
        if (string.IsNullOrEmpty(str) || str.Trim().Length >= 11 || !Regex.IsMatch(str.Trim(), @"^([-]|[0-9])[0-9]*(\.\w*)?$"))
            return defValue;

        int rv;
        if (Int32.TryParse(str, out rv))
            return rv;

        return Convert.ToInt32(StrToFloat(str, defValue));
    }

    /// <summary>
    /// string型转换为float型
    /// </summary>
    /// <param name="strValue">要转换的字符串</param>
    /// <param name="defValue">缺省值</param>
    /// <returns>转换后的int类型结果</returns>
    public static float StrToFloat(object strValue, float defValue)
    {
        if ((strValue == null))
            return defValue;

        return StrToFloat(strValue.ToString(), defValue);
    }

    /// <summary>
    /// string型转换为float型
    /// </summary>
    /// <param name="strValue">要转换的字符串</param>
    /// <param name="defValue">缺省值</param>
    /// <returns>转换后的int类型结果</returns>
    public static float ObjectToFloat(object strValue, float defValue)
    {
        if ((strValue == null))
            return defValue;

        return StrToFloat(strValue.ToString(), defValue);
    }

    /// <summary>
    /// string型转换为float型
    /// </summary>
    /// <param name="strValue">要转换的字符串</param>
    /// <param name="defValue">缺省值</param>
    /// <returns>转换后的int类型结果</returns>
    public static float ObjectToFloat(object strValue)
    {
        return ObjectToFloat(strValue.ToString(), 0);
    }

    /// <summary>
    /// string型转换为float型
    /// </summary>
    /// <param name="strValue">要转换的字符串</param>
    /// <returns>转换后的int类型结果</returns>
    public static float StrToFloat(object strValue)
    {
        if ((strValue == null))
            return 0;

        return StrToFloat(strValue.ToString(), 0);
    }

    /// <summary>
    /// string型转换为float型
    /// </summary>
    /// <param name="strValue">要转换的字符串</param>
    /// <param name="defValue">缺省值</param>
    /// <returns>转换后的int类型结果</returns>
    public static float StrToFloat(string strValue, float defValue)
    {
        if ((strValue == null) || (strValue.Length > 10))
            return defValue;

        float intValue = defValue;
        if (strValue != null)
        {
            bool IsFloat = Regex.IsMatch(strValue, @"^([-]|[0-9])[0-9]*(\.\w*)?$");
            if (IsFloat)
                float.TryParse(strValue, out intValue);
        }
        return intValue;
    }
}